﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main()
//{
//	int a = 0x11223344;
//
//	return 0;
//}

//大端字节序存储：当一个数据的低位字节的数据存储到高地址处，高位字节的数据存储到低地址处。
//小端字节序存储：当一个数据的低位字节的数据存储到低地址处，高位字节的数据存储到高地址处。

//int main()
//{
//	int a = 1;
//	char* p = &a;
//	if (*p == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//
//	return 0;
//}

//int check_sys()
//{
//	int a = 1;
//	if (*(char*)&a == 1)
//	{
//		return 1;
//	}
//	else
//		return 0;
//
//}
//
//int main()
//{
//	int a = 1;
//	
//	if (check_sys)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//
//	return 0;
//}

//#include <stdio.h>
//
//int check_sys()
//{
//	int i = 1;
//	return (*(char*)&i);
//}
//
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}


//int check_sys()
//{
//	//匿名联合体类型  ---> 联合体里的成员共用一个存储空间
//	union
//	{
//		int i;
//		char c;
//	}un;
//	un.i = 1;
//	return un.c;
//}
//
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}


//#include <stdio.h>
//
//int main()
//{
//	char a = -1;
//	//char 类型是有符号，还是无符号，这个不确定，这个取决于编译器的实现
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   a
//	//10000001  
//
//	signed char b = -1;
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   b
//	//10000001  
//
//	unsigned char c = -1;
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   c
//	// 正数的源码 、反码 、补码 是一样的
//	//c是无符号类型的
//
//	printf("a=%d,b=%d,c=%d", a, b, c);//-1  -1   255
//	//%d 是以十进制的形式进行打印的
//	// 整型提升
//	//11111111 11111111 11111111 11111111  a
//	//11111111 11111111 11111111 11111111  b
//	//00000000 00000000 00000000 11111111  c
//
//	return 0;
//}


//#include <stdio.h>
//
//int main()
//{
//	char a = -1;
//	//char 类型是有符号，还是无符号，这个不确定，这个取决于编译器的实现
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   a
//	//10000001  
//
//	signed char b = -1;
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   b
//	//10000001  
//
//	unsigned char c = -1;
//	//10000000 00000000 00000000 00000001   -1的源码
//	//11111111 11111111 11111111 11111110   -1的反码
//	//11111111 11111111 11111111 11111111   -1的补码
//	//11111111   c
//	// 正数的源码 、反码 、补码 是一样的
//	//c是无符号类型的
//
//	printf("a=%u,b=%u,c=%u", a, b, c);//4294967295  4294967295  255
//	//%d 是以十进制的形式进行打印的
//	// 整型提升
//	//11111111 11111111 11111111 11111111  a
//	//11111111 11111111 11111111 11111111  b
//	//00000000 00000000 00000000 11111111  c
//
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//	char a = -128;
//	//10000000 00000000 00000000 10000000
//	//11111111 11111111 11111111 01111111
//	//11111111 11111111 11111111 10000000 
//	//10000000  a
//
//	printf("%u\n", a);//4,294,967,168
//	//10000000  a
//	// 整型提升
//	//11111111 11111111 11111111 10000000
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//	char a = 128;
//	// 00000000 00000000 00000000 10000000
//	printf("%u\n", a);//4,294,967,168
//	//10000000  a
//	// 11111111 11111111 11111111 10000000
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%zd", strlen(a));//255
//
//	return 0;
//}


//#include <stdio.h>
//
//unsigned char i = 0;
//int main()
//{
//	for (i = 0; i <= 255; i++)
//	{
//		printf("hello world\n");//死循环打印hello world
//	}
//	return 0;
//}

//#include <stdio.h>
//#include <windows.h>
//
//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%u\n", i);
//		Sleep(1000);
//
//	}
//	return 0;
//}

//#include <stdio.h>
////X86环境 ⼩端字节序 
//int main()
//{
//	int a[4] = { 1, 2, 3, 4 };
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//	printf("%x,%x", ptr1[-1], *ptr2);//4  2000000
//
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);//9
//	printf("*pFloat的值为：%f\n", *pFloat);
//	
//	*pFloat = 9.0;
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);//9.000000
//	return 0;
//}

//整数和浮点数的存储是有差别的！！！


//#include <stdio.h>
//
//int main()
//{
//	int n = 9;
//	double* pdouble = (double*)&n;
//	printf("n的值为：%d\n", n);//9
//	printf("*pdouble的值为：%f\n", *pdouble);
//
//	*pdouble = 9.0;
//	printf("n的值为：%d\n", n);
//	printf("*pdouble的值为：%f\n", *pdouble);//9.000000
//	return 0;
//}


//#include <stdio.h>
//
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);//9
//	//00000000 00000000 00000000 00001001   
//
//	//0 00000000 00000000000000000001001   
//	//V = (-1) ^ S * M * 2 ^ E
//	//s = 0   M = 0.00000000000000000001001   E = -126
//
//	printf("*pFloat的值为：%f\n", *pFloat);
//
//	*pFloat = 9.0;
//	printf("n的值为：%d\n", n);//1,091,567,616
//	//1.001 * 2 ^ 3
//	//0 10000010 00100000000000000000000 
//
//	printf("*pFloat的值为：%f\n", *pFloat);//9.000000
//	return 0;
//}


//int main()
//{
//	float a = 5.5f;
//	//101.1  a
//	//1.011 * 2 ^ 2
//	//0 10000001 0110000000000000000000
//
//	//01000000 10110000 00000000 00000000
//	//40       b0       00       00
//	return 0;
//}

#include <stdio.h>
//
//int main()
//{
//    int n = 9;
//    //00000000000000000000000000001001
//    //0 00000000 00000000000000000001001
//    //S E        M
//    //E=-126
//    //M=0.00000000000000000001001
//    //S=0
//    //(-1)^0 * 0.00000000000000000001001 * 2^-126 
//    //
//    float* pFloat = (float*)&n;
//    printf("n的值为：%d\n", n);//9
//    printf("*pFloat的值为：%f\n", *pFloat);//0.000000
//
//    *pFloat = 9.0;
//    //以浮点数的形式存储9.0
//    //9.0---->2进制: 1001.0
//    //              (-1)^0 * 1.001 * 2^3
//    //              S=0  M=1.001  E=3   3+127=130
//    //              01000001000100000000000000000000
//    //
//    printf("n的值为：%d\n", n);//1,091,567,616
//    printf("*pFloat的值为：%f\n", *pFloat);//9.000000
//    return 0;
//}
//




//int main()
//{
//	float f = 5.5f;//10进制的浮点数
//	//2进制：101.1 == 1.011 * 2^2
//	//            == (-1)^0 * 1.011 *2^2
//	//               S=0  M=1.011 E=2     2+127
//	//               0100 0000 1011 0000 0000000000000000
//	//             0x4    0    B    0    0   0   0   0
//	// 
//	//123.45 --> 1.2345 * 10^2
//	//
//	return 0;
//}
